package com.meilingcloud.biobank.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.meilingcloud.biobank.domain.Source;
import com.meilingcloud.biobank.domain.dto.PatientTreatmentInfoDto;
import com.meilingcloud.biobank.domain.dto.SetUpPatientRemindersDto;
import com.meilingcloud.biobank.domain.vo.*;

import java.util.List;

/**
 * 样本源 Service接口
 *
 * @author chenl
 * @date 2021-02-26
 */
public interface ISourceService extends IService<Source> {

    /**
     * 查询列表
     */
    List<Source> queryList(Source source);

    /**
     * 查询列表 带样本源类型编号和名称
     */
    List<Source> queryListWithSourceType(List<Source> sources);

    /**
     * 根据ID查询
     */
    Source queryById(Long sourceId);

    /**
     * 根据编码查询
     */
    Source queryByCode(String sourceCode);

    boolean saveSource(Source source);

    boolean updateSource(Source source);

    /**
     * 根据名称查询
     */
    List<Source> getDetailByCodeOrName(String sourceName);

    /**
     * 根据样本源类型统计
     */
    List<StatisticVo> statisticSource();

    /**
     * 导入样本源
     */
    String importSource(List<Source> sources, boolean updateSupport);

    /**
     * 统计样本源总数
     */
    Integer statisticSourceCount();

    /**
     * 查询样本源信息
     */
    Source getSourceInfoById(Long sourceId);

    /**
     * 根据身份证号查询患者信息
     *
     * @param idCard 身份证
     * @return {@link GetPatientInfoVo}
     */
    GetPatientInfoVo getPatientInfoByIdCard(String idCard);

    /**
     * 根据条件查询患者治疗信息
     *
     * @param dto dto
     * @return {@link List}<{@link GetPatientTreatmentInfoVo}>
     */
    List<GetPatientTreatmentInfoVo> getPatientTreatmentInfo(PatientTreatmentInfoDto dto);

    /**
     * 设置患者提醒
     *
     * @param dto dto
     * @return int
     */
    int SetUpPatientReminders(SetUpPatientRemindersDto dto);

    /**
     * 查询当天提醒患者就诊信息
     *
     * @return {@link List}<{@link GetPatientRemindersInfoTodayVo}>
     */
    List<GetPatientRemindersInfoTodayVo> getPatientTreatmentInfo();

    /**
     * 获取当天需要提醒的身份证集合
     *
     * @return {@link List}<{@link String}>
     */
    List<String> getRemindIdcardsToday();


    /**
     * 根据身份证号查询患者用药信息（并且条件查询）
     *
     * @param dto 身份证（带条件入参）
     * @return {@link List}<{@link GetPatientYYInfoByIdCardVo}>
     */
    List<GetPatientYYInfoByIdCardVo> getPatientYYInfoByIdCard(PatientTreatmentInfoDto dto);

    /**
     * 根据身份证号查询患者诊断信息
     *
     * @param dto 身份证（带条件入参）
     * @return {@link List}<{@link GetPatientZDInfoByIdCardVo}>
     */
    List<GetPatientZDInfoByIdCardVo> getPatientZDInfoByIdCard(PatientTreatmentInfoDto dto);

//    /**
//     * 获取提醒的样本源列表（身份证）
//     *
//     * @return {@link List}<{@link Source}>
//     */
//    List<Source> getTXSources();
}
